﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace ModeloNegocio
{
    public static class ConexionBaseDatos
    {
        /* Obtengo la configuracion para conectarme a la base de datos que se encuentra en Web.config*/
        private static string connectionString = ConfigurationManager.ConnectionStrings["BDSQLEXPRESS"].ConnectionString;

        /* Creo la conexion a la base de datos pasandole el connectionString antes creado*/
        public static SqlConnection con = new SqlConnection(connectionString);



        public static int obtenerNumeroStoreProcedure(string nomStoreProcedure, List<SqlParameter> parametrosProcedure){
            
            /* Creo el comando que quiero que se ejecute en la base de datos en este caso siendo un StoreProcedure*/
            using(SqlCommand comando = new SqlCommand(nomStoreProcedure,con))
	        {

                /*Le indico que voy a ejecutar un Store Procedure*/
                comando.CommandType = CommandType.StoredProcedure;

                /* antes de agregar los parametros me fijo si me pasan parametros*/
                if (parametrosProcedure != null)
                {
                    foreach (SqlParameter parametro in parametrosProcedure)
                    {

                        comando.Parameters.Add(parametro);

                    }
                }                              

                /* Abro la conexion a la base de datos*/
                if(con.State != ConnectionState.Open)
                    con.Open();

                /* Ejecuto el comando por el cual recibo un numero*/
                 int resultado = (int)comando.ExecuteScalar();

                con.Close();

                return resultado;
            }                                                  
        }

        public static void ejecutarStoreProcedure(string nomStoreProcedure, List<SqlParameter> parametrosProcedure)
        {

            using (SqlCommand comando = new SqlCommand(nomStoreProcedure, con))
            {

                /*Le indico que voy a ejecutar un Store Procedure*/
                comando.CommandType = CommandType.StoredProcedure;

                /* antes de agregar los parametros me fijo si me pasan parametros*/
                if (parametrosProcedure != null)
                {
                    foreach (SqlParameter parametro in parametrosProcedure)
                    {

                        comando.Parameters.Add(parametro);

                    }
                }
                
                /* Abro la conexion a la base de datos*/
                if (con.State != ConnectionState.Open)
                    con.Open();



                /* Ejecuto el comando en el cual se ejecuta en la base de datos(para por ejemplo INSERT o UPDATE se ejecute en el Store Procedure)*/
                comando.ExecuteNonQuery();

                con.Close();
            }
        }

        public static SqlDataReader obtenerReaderStoreProcedure(string nomStoreProcedure, List<SqlParameter> parametrosProcedure)
        {

            using (SqlCommand comando = new SqlCommand(nomStoreProcedure, con))
            {
                /*Le indico que voy a ejecutar un Store Procedure*/
                comando.CommandType = CommandType.StoredProcedure;

                /* antes de agregar los parametros me fijo si me pasan parametros*/
                if (parametrosProcedure != null)
                {
                    foreach (SqlParameter parametro in parametrosProcedure)
                    {

                        comando.Parameters.Add(parametro);

                    }
                }

                /* Abro la conexion a la base de datos*/
                if (con.State != ConnectionState.Open)
                    con.Open();
                
                SqlDataReader rdr;
                /* Ejecuto el comando en el cual se ejecuta en la base de datos(para por ejemplo INSERT o UPDATE se ejecute en el Store Procedure)*/                

                rdr = comando.ExecuteReader();                

                return rdr;
               
            }
        }

    }
}
